package com.gouqi.tools.model.vo;

import com.baomidou.mybatisplus.annotation.TableId;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.gouqi.gouqitoolscommon.model.entity.Tool;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 工具视图
 */
@Data
public class ToolVO implements Serializable {

    private final static Gson GSON = new Gson();

    /**
     * 主键
     */
    @TableId
    private String id;

    /**
     * logo
     */
    private String logo;

    /**
     * 名称
     */
    private String name;

    /**
     * 描述
     */
    private String description;

    /**
     * 接口地址
     */
    private String url;

    /**
     * 标签列表 json
     */
    private List<String> tags;

    /**
     * 请求头
     */
    private String requestHeader;

    /**
     * 请求参数
     */
    private String requestParams;

    /**
     * 响应头
     */
    private String responseHeader;

    /**
     * 接口状态（0-关闭，1-开启）
     */
    private Integer status;

    /**
     * 请求类型
     */
    private String method;

    /**
     * 创建人
     */
    private UserVO user;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 调用次数
     */
    private Integer totalNum;

    /**
     * 包装类转对象
     *
     * @param toolVO
     * @return
     */
    public static Tool voToObj(ToolVO toolVO) {
        if (toolVO == null) {
            return null;
        }
        Tool tool = new Tool();
        BeanUtils.copyProperties(toolVO, tool);
        List<String> tagList = toolVO.getTags();
        if (tagList != null) {
            tool.setTags(GSON.toJson(tagList));
        }
        return tool;
    }

    /**
     * 对象转包装类
     *
     * @param tool
     * @return
     */
    public static ToolVO objToVo(Tool tool) {
        if (tool == null) {
            return null;
        }
        ToolVO toolVO = new ToolVO();
        BeanUtils.copyProperties(tool, toolVO);
        toolVO.setTags(GSON.fromJson(tool.getTags(), new TypeToken<List<String>>() {
        }.getType()));
        return toolVO;
    }

}
